//
//  main.c
//  动态存储空间的使用
//
//  Created by ws on 2017/7/24.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>
#include <stdlib.h>

/**
 堆:动态存储区
 1.它的内存由程序员管理
 
 使用动态存储区
 1.导入 stblib.h
 malloc(size_t size);
 向操作系统申请堆中一块存空间,如果操作系统分配成功,就返回这个存储空间的地址,否侧返回NULL
 2.free(viod *); 告诉操作系统这块存储空间不再使用了,有一个malloc就必须有一个free与之对应,否则造成内存泄露
 3.释放过的指针就不可以再次释放了,否则程序崩溃了
 */
int main(int argc, const char * argv[]) {
  //向操作系统申请内存
    int *pi = malloc(sizeof(int));
    //先判断系统是分配成功没有
    if (pi != NULL) {
        //使用内存
        *pi = 20;
        printf("%d -- %p\n",*pi,pi);
        //释放内存:什么时候释放由操作系统决定
        free(pi);
        printf("%d -- %p\n",*pi,pi);
//        free(pi);//释放过的指针就不可以再次释放了,否则程序崩溃了
        //清空指针
        pi = NULL;
        //清空后的指针使用free不会有任何效果,free对空  是无效的
        free(pi);
    }
    
    return 0;
}
